DAY3生成了一個遊戲,為一個主要使用動態生成數據製作的遊戲,今天就接著加上其他不同的語句來增加遊戲的難易度吧!今天的迴圈主要增加了continue 語句,以下是語法與遊戲的介紹!
目錄:
1.continue 語句用法
2遊戲生成
continue 語句在許多程式語言(如C、C++、Java、Python等)中都存在,用來控制迴圈的流程。當程式執行到 continue 語句時,會跳過該次迴圈的剩餘部分,並直接進入下一次迴圈的迭代。這在需要略過某些特定條件下的操作時非常有用。
以下為各種語言中 continue 語句的使用範例:
/Python 範例
for i in range(10):
if i % 2 == 0:
continue # 跳過偶數
print(i) # 輸出奇數
/Java 範例
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳過偶數
}
System.out.println(i); // 輸出奇數
}
/C++ 範例
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳過偶數
}
std::cout << i << std::endl; // 輸出奇數
}
在以上範例中,當 i 是偶數時,continue 語句會使迴圈跳過當前的迭代,直接進入下一次迭代。因此,輸出結果只會包含奇數。
2.遊戲生成
import java.util.Random;
import java.util.Stack;
public class AdvancedMaze {
private final int width;
private final int height;
private final char[][] maze;
private final Random random = new Random();
private int score;
public AdvancedMaze(int width, int height) {
this.width = width;
this.height = height;
this.maze = new char[width][height];
this.score = 0;
generateMaze();
}
private void generateMaze() {
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
maze[x][y] = '#'; // 用#表示牆壁
}
}
Stack<int[]> stack = new Stack<>();
int startX = random.nextInt(width);
int startY = random.nextInt(height);
maze[startX][startY] = ' ';
stack.push(new int[]{startX, startY});
while (!stack.isEmpty()) {
int[] cell = stack.pop();
int x = cell[0];
int y = cell[1];
int[][] directions = {{0, 2}, {2, 0}, {0, -2}, {-2, 0}};
shuffleArray(directions);
for (int[] direction : directions) {
int newX = x + direction[0];
int newY = y + direction[1];
if (isInMaze(newX, newY) && maze[newX][newY] == '#') {
maze[newX][newY] = ' ';
maze[x + direction[0] / 2][y + direction[1] / 2] = ' ';
stack.push(new int[]{newX, newY});
}
}
}
// 添加障礙物和得分系統(增加continue 語句)
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
if (maze[x][y] == ' ' && random.nextInt(100) < 10) {
maze[x][y] = 'T'; // T表示陷阱,扣分
} else if (maze[x][y] == ' ' && random.nextInt(100) < 5) {
maze[x][y] = 'C'; // C表示寶藏,加分
} else {
continue; // 跳過不需要更改的部分
}
}
}
}
private boolean isInMaze(int x, int y) {
return x > 0 && x < width - 1 && y > 0 && y < height - 1;
}
private void shuffleArray(int[][] array) {
for (int i = array.length - 1; i > 0; i--) {
int index = random.nextInt(i + 1);
int[] temp = array[index];
array[index] = array[i];
array[i] = temp;
}
}
public void printMaze() {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
System.out.print(maze[x][y]);
}
System.out.println();
}
}
public int getScore() {
return score;
}
public void moveCharacter(int startX, int startY) {
int x = startX;
int y = startY;
while (true) {
if (maze[x][y] == 'T') {
score -= 10;
System.out.println("踩到陷阱,扣10分");
} else if (maze[x][y] == 'C') {
score += 10;
System.out.println("找到寶藏,加10分");
}
maze[x][y] = ' '; // 清除標記
// 隨機移動到下一個位置
int[] directions = {0, 1, 0, -1, 1, 0, -1, 0}; // 上、右、下、左
int dirIndex = random.nextInt(4) * 2;
x += directions[dirIndex];
y += directions[dirIndex + 1];
if (x < 0 || x >= width || y < 0 || y >= height || maze[x][y] == '#') {
break; // 碰到牆壁或邊界時停止移動
}
}
}
public static void main(String[] args) {
AdvancedMaze maze = new AdvancedMaze(21, 21);
maze.printMaze();
maze.moveCharacter(10, 10);
System.out.println("最終得分: " + maze.getScore());
}
}
此週將設計一個完整簡單的遊戲,透過遊戲學習迴圈用法。下禮拜可以使用其他語法整理更多我們的日常所需!